// 封装请求
import axios from 'axios'
import store from '@/store'
import { ElMessage } from 'element-plus'
import { isCheckTimeout } from '@/utils/auth'
import md5 from 'md5'

const server = axios.create({
    baseURL: process.env.VUE_APP_BASE_API,
    timeout: 5000
})


// 请求拦截器
server.interceptors.request.use(
    config => {
        //添加icode
        config.headers.icode = "1BB3797345D2472E"

        // 设置code
        const { icode, time } = getTestICode()
        config.headers.icode = icode
        config.headers.codeType = time


        //配置token
        if (store.getters.token) {
            // 判断是否超时
            if (isCheckTimeout()) {
                //超时退出操作
                store.dispatch('user/logout')
                return Promise.reject(new Error('token 失效'))
            }

            // 如果token存在 设置请求头
            config.headers.Authorization = `Bearer ${store.getters.token}`
        }
        // 配置接口国际化
        config.headers['Accept-Language'] = store.getters.language
        return config // 必须返回配置
    },
    error => {
        return Promise.reject(error)
    }
)



// 响应拦截器
server.interceptors.response.use(
    // 请求成功
    response => {
        const { success, message, data } = response.data
        //   要根据success的成功与否决定下面的操作
        if (success) {
            // 返回解析后的数据
            return data
        } else {
            // 业务错误
            ElMessage.error(message) // 提示错误消息
            // 失败回调
            return Promise.reject(new Error(message))
        }
    },
    // 请求失败
    error => {
        // 处理 token 超时问题被动处理请求超时
        if (
            error.response &&
            error.response.data &&
            error.response.data.code === 401
        ) {
            // 调用退出
            store.dispatch('user/logout')
        }
        ElMessage.error(error.message) // 提示错误信息
        return Promise.reject(error)
    }
)


// 实现code
function getTestICode() {
    const now = parseInt(Date.now() / 1000)
    const code = now + 'LGD_Sunday-1991'
    return {
        icode: md5(code),
        time: now
    }
}

export default server
